草庐IT

C++ 对和指针

全部标签

c++ - 这个指针上的 const_cast 是未定义的行为吗?

在另一个问题中,我遇到了这段代码:RealStatData::mean(Realtrim)const{//trim,punnotintendedconst_cast(*this).items.sort();//trim}cppreference在他们的page上也有一个例子:structtype{type():i(3){}voidm1(intv)const{//this->i=v;//compileerror:thisisapointertoconstconst_cast(this)->i=v;//OK}inti;};除了为什么这会实用这一显而易见的问题之外,它不安全吗?创建的对象是否

c++ - 在派生对象到基类的 "this"指针上使用 static_cast 的问题

这是取自EffectiveC++3ed的一个例子,它说如果这样使用static_cast,对象的基础部分被复制,并且调用从该部分调用。我想了解幕后发生的事情,有人会帮忙吗?classWindow{//baseclasspublic:virtualvoidonResize(){}//baseonResizeimpl};classSpecialWindow:publicWindow{//derivedclasspublic:virtualvoidonResize(){//derivedonResizeimpl;static_cast(*this).onResize();//cast*thi

c++ - 可以在分配有新位置的指针上调用 delete 吗?

我们可以在分配给placementnew的指针上调用delete吗?如果没有那么为什么?请详细说明。我知道没有展示位置删除。但是我想知道为什么只删除opetator不能删除内存而不关心指针指向的内存是如何分配的?delete做两件事:调用析构函数释放内存而且我认为delete没有理由不能对通过placementnew创建的对象调用这两个操作中的任何一个。知道原因吗? 最佳答案 您只能对使用operatornew创建的指针调用delete。如果您将放置new与由普通operatornew分配的内存位置一起使用,那么您可以安全地对其使用

c++ - 用指针理解 const_iterator?

我试图理解const_iterator的含义。我有以下示例代码:voidCustomerService::RefreshCustomers(){for(std::vector::const_iteratorit=customers_.begin();it!=customers_.end();it++){(*it)->Refresh();}}Refresh()是Customer类中的一个方法,它没有定义为const。起初我以为const_iterator应该禁止修改容器的元素。但是,此代码可以毫无怨言地编译。这是因为正在进行额外级别的间接访问吗?const_iterator究竟是做什么/

C++ 指针之间的取消引用

假设我有一个类FooclassFoo{}我做以下作业:Foo*ptrFoo=newFoo();Foo&ref=*(ptrFoo);//question1Fooafoo=*(ptrFoo);//quesion2我的问题:1)当分配给“&ref”时,在内存方面内部发生了什么?它只是将“ptrFoo”的内存地址分配给“ref”吗?2)当分配给“afoo”时,发生了什么?它是否调用复制构造函数?这意味着为两个Foo对象分配了内存?即,“afoo”和之前为“ptrFoo”分配的内存?3)假设我有一个名为“voidmethodBar(constFoo&instance)”的方法如果我将“ptrFo

C++ 数组指针 [] 或++

假设我想遍历一个double组并对它们求和。我有两种方法可以做到这一点。一个)doublesum(double*series,intsize){doublesum=0.0;for(inti=0;iB)doublesum(double*series,intsize){doublesum=0.0;for(inti=0;i哪个更好,为什么/什么时候我应该使用一个而不是另一个。 最佳答案 这是可读性的问题,应该不会影响性能。我认为B是最可读的,因此更可取。我还可以提出第三种变体,它是基于范围的(注意begin和end参数):doublesu

c++ - 如何在 C++ 中创建指向多维 int 数组的指针?

我知道如何创建多维数组标准方法:constintm=12;constinty=3;intsales[y][n];而且我知道如何创建一个指向一维数组的指针:int*ms=newint[m];但是有可能创建一个指向多维数组的指针吗?int*sales=newint[y][m];//doesn'tworkint*mSales=newint[m];//okint*ySales=newint[y];//okmSales*ySales=newmSales[y];//doesn'twork,mSalesisnotatype如何创建这样的指针? 最佳答案

c++ - 常量指针数组

好的,我知道这是无效的charchar_A='A';constchar*myPtr=&char_A;*myPtr='J';//error-can'tchangevalueof*myP[因为我们声明了一个指向常量字符的指针]为什么这是有效的?constchar*linuxDistro[6]={"Debian","Ubuntu","OpenSuse","Fedora","LinuxMint","Mandriva"};for(inti=0;i感谢您的关注! 最佳答案 你写*linuxDistro="WhyCanIchangeThis";完

c++ - array<> 不能简单地在内部交换指针

对于用TR1引入STL的容器数组,我有下面的问题。在“TheC++standardlibraryATutorialandReference”一书的第263页中:Note,however,thatanarraycan’tsimplyswappointersinternally.Forthisreason,swap()haslinearcomplexityandtheeffectthatiteratorsandreferencesdon’tswapcontainerswiththeirelements.我想知道为什么array不能考虑交换指针的恒定开销? 最佳答

c++ - 唯一指针类内初始化

假设我有一个要在类中初始化的unique_ptr成员对象,请参见下面的代码。为什么我必须使用统一初始化(花括号)?第二个声明吐出一个错误,类似于so.cpp:10:31:error:expectedparameterdeclaratorstd::unique_ptrupf2(newFoo);^so.cpp:10:31:error:expected')'so.cpp:10:30:note:tomatchthis'('std::unique_ptrupf2(newFoo);^2errorsgenerated.而且我不认为这是最令人烦恼的解析问题,至少我不这么认为。#includeclass